package com.nicolas.pattern.strategy;

/**
 * 在策略模式中，我们可以定义一些独立的类来封装不同的算法，
 * 每一个类封装一种具体的算法，在这里，每一个封装算法的类我们都可以称之为一种策略(Strategy)，
 * 为了保证这些策略在使用时具有一致性，一般会提供一个抽象的策略类来做规则的定义，
 * 而每种算法则对应于一个具体策略类。

策略模式的主要目的是将算法的定义与使用分开，
也就是将算法的行为和环境分开，将算法的定义放在专门的策略类中，
每一个策略类封装了一种实现算法，使用算法的环境类针对抽象策略类进行编程，
符合“依赖倒转原则”。在出现新的算法时，只
需要增加一个新的实现了抽象策略类的具体策略类即可。策略模式定义如下：

策略模式(Strategy Pattern)：定义一系列算法类，将每一个算法封装起来，
并让它们可以相互替换，策略模式让算法独立于使用它的客户而变化，
也称为政策模式(Policy)。策略模式是一种对象行为型模式。
 * @author nicolas  2017年2月13日 -- 下午9:29:55
 */
public class StrategyMain {
	public static void main(String args[]) {  
        MovieTicket mt = new MovieTicket();  
        double originalPrice = 60.0;  
        double currentPrice;  
          
        mt.setPrice(originalPrice);  
        System.out.println("原始价为：" + originalPrice);  
        System.out.println("---------------------------------");  
              
        Discount discount;  
        discount = (Discount)XMLUtil.getBean(); //读取配置文件并反射生成具体折扣对象  
        mt.setDiscount(discount); //注入折扣对象  
          
        currentPrice = mt.getPrice();  
        System.out.println("折后价为：" + currentPrice);  
    }  
}
